Add rate limits for changing a page's content model
authorKunal Mehta <legoktm@member.fsf.org>
Thu, 8 Sep 2016 01:38:19 +0000 (18:38 -0700)
committerKunal Mehta <legoktm@member.fsf.org>
Thu, 8 Sep 2016 01:38:19 +0000 (18:38 -0700)
The defaults are set to the same value as page moves.

Change-Id: I72d6c35ecda475101c1c909715e4ba693dd214f6

includes/DefaultSettings.php
includes/EditPage.php
includes/specials/SpecialChangeContentModel.php

index 3bf8381..bae7420 100644 (file)
@@ -5581,6 +5581,11 @@ $wgRateLimits = [
                'ip' => [ 8, 60 ],
                'newbie' => [ 8, 60 ],
        ],
+       // Changing the content model of a page
+       'editcontentmodel' => [
+               'newbie' => [ 2, 120 ],
+               'user' => [ 8, 60 ],
+       ],
 ];
 
 /**
index b98c908..4e9aeba 100644 (file)
@@ -1836,7 +1836,9 @@ class EditPage {
                        $status->value = self::AS_READ_ONLY_PAGE;
                        return $status;
                }
-               if ( $wgUser->pingLimiter() || $wgUser->pingLimiter( 'linkpurge', 0 ) ) {
+               if ( $wgUser->pingLimiter() || $wgUser->pingLimiter( 'linkpurge', 0 )
+                       || ( $changingContentModel && $wgUser->pingLimiter( 'editcontentmodel' ) )
+               ) {
                        $status->fatal( 'actionthrottledtext' );
                        $status->value = self::AS_RATE_LIMITED;
                        return $status;
index ccbb275..b37c475 100644 (file)
@@ -191,6 +191,12 @@ class SpecialChangeContentModel extends FormSpecialPage {
                        // Page doesn't exist, create an empty content object
                        $newContent = ContentHandler::getForModelID( $data['model'] )->makeEmptyContent();
                }
+
+               // All other checks have passed, let's check rate limits
+               if ( $user->pingLimiter( 'editcontentmodel' ) ) {
+                       throw new ThrottledError();
+               }
+
                $flags = $this->oldRevision ? EDIT_UPDATE : EDIT_NEW;
                $flags |= EDIT_INTERNAL;
                if ( $user->isAllowed( 'bot' ) ) {